package com.mercury.ec.module.air.controller.admin.order.vo.orderprice;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.mercury.ec.framework.excel.core.annotations.DictFormat;
import com.mercury.ec.framework.excel.core.convert.DictConvert;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

@Schema(description = "管理后台 - 机票订单价格 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AirOrderPriceRespVO {

    @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "7993")
    @ExcelProperty("id")
    private Long id;

    @Schema(description = "原价格id", example = "26397")
    @ExcelProperty("原价格id")
    private Long originOrderPriceId;

    @Schema(description = "订单id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30802")
    @ExcelProperty("订单id")
    private Long orderId;

    @Schema(description = "订单行程id", requiredMode = Schema.RequiredMode.REQUIRED, example = "31537")
    @ExcelProperty("订单行程id")
    private Long orderRouteId;

    @Schema(description = "订单乘客id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29136")
    @ExcelProperty("订单乘客id")
    private Long orderPassengerId;

    @Schema(description = "票价级别FareBasis", example = "ZPR7WNNP")
    private String fareBasis;

    @Schema(description = "出票代码")
    @ExcelProperty("出票代码")
    private String airlineIssueNo;

    @Schema(description = "票号")
    @ExcelProperty("票号")
    private String ticketNo;

    @Schema(description = "终止票号")
    @ExcelProperty("终止票号")
    private String ticketLastNo;

    @Schema(description = "打票机号")
    @ExcelProperty("打票机号")
    private String ticketVendingMachineNo;

    @Schema(description = "编码客票状态", example = "VOID")
    private String ticketStatus;

    @Schema(description = "出票失败原因 字典（air_order_ticket_fail_cause）")
    @ExcelProperty(value = "出票失败原因 字典（air_order_ticket_fail_cause）", converter = DictConvert.class)
    @DictFormat("air_order_ticket_fail_cause") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer ticketFailCause;

    @Schema(description = "改签状态 字典（air_order_change_status 0-未改签，2-已改签）", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty(value = "改签状态 字典（air_order_change_status 0-未改签，2-已改签）", converter = DictConvert.class)
    @DictFormat("air_order_change_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer changeStatus;

    @Schema(description = "改签类型 字典（air_order_change_type 1-改期/2-升舱）")
    @ExcelProperty(value = "改签类型", converter = DictConvert.class)
    @DictFormat("air_order_change_type")
    private Integer changeType;

    @Schema(description = "改签员id 见表（system_users.id）", example = "10214")
    @ExcelProperty("改签员id 见表（system_users.id）")
    private Long changeUserId;

    @Schema(description = "改签部门id 见表（system_dept.id）", example = "11971")
    @ExcelProperty("改签部门id 见表（system_dept.id）")
    private Long changeDeptId;

    @Schema(description = "改签时间")
    @ExcelProperty("改签时间")
    private LocalDateTime changeTime;

    @Schema(description = "退票状态 字典（air_order_return_status 0-未退票，2-已退票）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "退票状态 字典（air_order_return_status 0-未退票，2-已退票）", converter = DictConvert.class)
    @DictFormat("air_order_return_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer returnStatus;

    @Schema(description = "退票订单类型 字典（air_order_return_order_type 1-退票/2-废票）", example = "1")
    @ExcelProperty(value = "退票订单类型", converter = DictConvert.class)
    @DictFormat("air_order_return_order_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer returnOrderType;

    @Schema(description = "退票类型 字典（air_order_return_type 1-自愿/2-非自愿）", example = "1")
    @ExcelProperty(value = "退票类型 字典（air_order_return_type 1-自愿/2-非自愿）", converter = DictConvert.class)
    @DictFormat("air_order_return_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer returnType;

    @Schema(description = "退票原因 字典（air_order_return_cause）", example = "1")
    @ExcelProperty(value = "退票原因", converter = DictConvert.class)
    @DictFormat("air_order_return_cause")
    private Integer returnCause;

    @Schema(description = "退票员id 见表（system_users.id）", example = "1706")
    @ExcelProperty("退票员id 见表（system_users.id）")
    private Long returnUserId;

    @Schema(description = "退票部门id 见表（system_dept.id）", example = "5398")
    @ExcelProperty("退票部门id 见表（system_dept.id）")
    private Long returnDeptId;

    @Schema(description = "退票时间")
    @ExcelProperty("退票时间")
    private LocalDateTime returnTime;

    @Schema(description = "调账状态 字典（air_order_adjust_status 0-未调账，2-已调账）", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty(value = "调账状态 字典（air_order_adjust_status 0-未调账，2-已调账）", converter = DictConvert.class)
    @DictFormat("air_order_adjust_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer adjustStatus;

    @Schema(description = "调账类型 字典（air_order_adjust_type 1-/2-/3-）", example = "2")
    @ExcelProperty(value = "调账类型 字典（air_order_adjust_type 1-/2-/3-）", converter = DictConvert.class)
    @DictFormat("air_order_adjust_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer adjustType;

    @Schema(description = "调账员id 见表（system_users.id）", example = "26248")
    @ExcelProperty("调账员id 见表（system_users.id）")
    private Long adjustUserId;

    @Schema(description = "调账部门id 见表（system_dept.id）", example = "23527")
    @ExcelProperty("调账部门id 见表（system_dept.id）")
    private Long adjustDeptId;

    @Schema(description = "调账时间")
    @ExcelProperty("调账时间")
    private LocalDateTime adjustTime;

    @Schema(description = "附加费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("附加费")
    private BigDecimal saleAdditionalFee;

    @Schema(description = "服务费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("服务费")
    private BigDecimal saleServiceFee;

    @Schema(description = "升舱费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("升舱费")
    private BigDecimal saleUpgradeFee;

    @Schema(description = "改期费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("改期费")
    private BigDecimal saleChangeFee;

    @Schema(description = "退票费率", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("退票费率")
    private BigDecimal saleReturnFeeRate;

    @Schema(description = "退票费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("退票费")
    private BigDecimal saleReturnFee;

    @Schema(description = "票面价", requiredMode = Schema.RequiredMode.REQUIRED, example = "17704")
    @ExcelProperty("票面价")
    private BigDecimal saleTicketPrice;

    @Schema(description = "销售价", requiredMode = Schema.RequiredMode.REQUIRED, example = "30919")
    @ExcelProperty("销售价")
    private BigDecimal salePrice;

    @Schema(description = "已用票面价", requiredMode = Schema.RequiredMode.REQUIRED, example = "8877")
    @ExcelProperty("已用票面价")
    private BigDecimal saleUsedPrice;

    @Schema(description = "机建税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("机建税")
    private BigDecimal saleAirportTax;

    @Schema(description = "已用机建税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用机建税")
    private BigDecimal saleUsedAirportTax;

    @Schema(description = "燃油税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("燃油税")
    private BigDecimal saleOilTax;

    @Schema(description = "已用燃油税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用燃油税")
    private BigDecimal saleUsedOilTax;

    @Schema(description = "销售税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("销售税")
    private BigDecimal saleTax;

    @Schema(description = "已用销售税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用销售税")
    private BigDecimal saleUsedTax;

    @Schema(description = "代理费率", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("代理费率")
    private BigDecimal saleAgencyFeeRate;

    @Schema(description = "代理费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("代理费")
    private BigDecimal saleAgencyFee;

    @Schema(description = "后返费率", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("后返费率")
    private BigDecimal saleBackRebateFeeRate;

    @Schema(description = "后返费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("后返费")
    private BigDecimal saleBackRebateFee;

    @Schema(description = "记奖价", requiredMode = Schema.RequiredMode.REQUIRED, example = "28158")
    @ExcelProperty("记奖价")
    private BigDecimal salePrizePrice;

    @Schema(description = "记奖税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("记奖税")
    private BigDecimal salePrizeTax;

    @Schema(description = "销售金额", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("销售金额")
    private BigDecimal saleAmount;

    @Schema(description = "应收", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("应收")
    private BigDecimal saleReceivable;

    @Schema(description = "实收", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("实收")
    private BigDecimal saleReceipts;

    @Schema(description = "支付状态 字典（system_pay_status）", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @ExcelProperty(value = "支付状态 字典（system_pay_status）", converter = DictConvert.class)
    @DictFormat("system_pay_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer salePayStatus;

    @Schema(description = "支付科目id 见表（basic_pay_subject.id）", example = "11044")
    @ExcelProperty("支付科目id 见表（basic_pay_subject.id）")
    private Long salePaySubjectId;

    @Schema(description = "支付方式id 见表（basic_pay_type.id）", example = "5098")
    @ExcelProperty("支付方式id 见表（basic_pay_type.id）")
    private Long salePayTypeId;

    @Schema(description = "支付账号", example = "20584")
    @ExcelProperty("支付账号")
    private String salePayAccount;

    @Schema(description = "支付单号")
    @ExcelProperty("支付单号")
    private String salePayOrderNo;

    @Schema(description = "支付时间")
    @ExcelProperty("支付时间")
    private LocalDateTime salePayTime;

    @Schema(description = "是否在线支付")
    @ExcelProperty(value = "是否在线支付", converter = DictConvert.class)
    @DictFormat("infra_boolean_string") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Boolean salePayOnline;

    @Schema(description = "采购商id 见表（basic_vendor.id）", requiredMode = Schema.RequiredMode.REQUIRED, example = "14000")
    @ExcelProperty("采购商id 见表（basic_vendor.id）")
    private Long purchaseId;

    @Schema(description = "采购单号")
    @ExcelProperty("采购单号")
    private String purchaseOrderNo;

    @Schema(description = "采购附加费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购附加费")
    private BigDecimal purchaseAdditionalFee;

    @Schema(description = "采购服务费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购服务费")
    private BigDecimal purchaseServiceFee;

    @Schema(description = "采购升舱费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购升舱费")
    private BigDecimal purchaseUpgradeFee;

    @Schema(description = "采购改期费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购改期费")
    private BigDecimal purchaseChangeFee;

    @Schema(description = "采购退票费率", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购退票费率")
    private BigDecimal purchaseReturnFeeRate;

    @Schema(description = "采购退票费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购退票费")
    private BigDecimal purchaseReturnFee;

    @Schema(description = "采购票面价", requiredMode = Schema.RequiredMode.REQUIRED, example = "18086")
    @ExcelProperty("采购票面价")
    private BigDecimal purchaseTicketPrice;

    @Schema(description = "采购价", requiredMode = Schema.RequiredMode.REQUIRED, example = "29611")
    @ExcelProperty("采购价")
    private BigDecimal purchasePrice;

    @Schema(description = "已用采购票面价", requiredMode = Schema.RequiredMode.REQUIRED, example = "32526")
    @ExcelProperty("已用采购票面价")
    private BigDecimal purchaseUsedPrice;

    @Schema(description = "采购机建税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购机建税")
    private BigDecimal purchaseAirportTax;

    @Schema(description = "已用采购机建税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用采购机建税")
    private BigDecimal purchaseUsedAirportTax;

    @Schema(description = "采购燃油税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购燃油税")
    private BigDecimal purchaseOilTax;

    @Schema(description = "已用采购燃油税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用采购燃油税")
    private BigDecimal purchaseUsedOilTax;

    @Schema(description = "采购税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购税")
    private BigDecimal purchaseTax;

    @Schema(description = "已用采购税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("已用采购税")
    private BigDecimal purchaseUsedTax;

    @Schema(description = "采购代理费率", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购代理费率")
    private BigDecimal purchaseAgencyFeeRate;

    @Schema(description = "采购代理费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购代理费")
    private BigDecimal purchaseAgencyFee;

    @Schema(description = "采购后返费率", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购后返费率")
    private BigDecimal purchaseBackRebateFeeRate;

    @Schema(description = "采购后返费", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购后返费")
    private BigDecimal purchaseBackRebateFee;

    @Schema(description = "采购记奖价", requiredMode = Schema.RequiredMode.REQUIRED, example = "8433")
    @ExcelProperty("采购记奖价")
    private BigDecimal purchasePrizePrice;

    @Schema(description = "采购记奖税", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购记奖税")
    private BigDecimal purchasePrizeTax;

    @Schema(description = "采购金额", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购金额")
    private BigDecimal purchaseAmount;

    @Schema(description = "采购应付", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购应付")
    private BigDecimal purchasePayable;

    @Schema(description = "采购实付", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("采购实付")
    private BigDecimal purchasePayment;

    @Schema(description = "采购支付状态 字典（system_pay_status）", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
    @ExcelProperty(value = "采购支付状态 字典（system_pay_status）", converter = DictConvert.class)
    @DictFormat("system_pay_status") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer purchasePayStatus;

    @Schema(description = "采购支付科目id 见表（basic_pay_subject.id）", example = "5867")
    @ExcelProperty("采购支付科目id 见表（basic_pay_subject.id）")
    private Long purchasePaySubjectId;

    @Schema(description = "采购支付方式id 见表（basic_pay_type.id）", example = "30994")
    @ExcelProperty("采购支付方式id 见表（basic_pay_type.id）")
    private Long purchasePayTypeId;

    @Schema(description = "采购支付账号", example = "12883")
    @ExcelProperty("采购支付账号")
    private String purchasePayAccount;

    @Schema(description = "采购支付单号")
    @ExcelProperty("采购支付单号")
    private String purchasePayOrderNo;

    @Schema(description = "采购支付时间")
    @ExcelProperty("采购支付时间")
    private LocalDateTime purchasePayTime;

    @Schema(description = "采购是否在线支付")
    @ExcelProperty(value = "采购是否在线支付", converter = DictConvert.class)
    @DictFormat("infra_boolean_string") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Boolean purchasePayOnline;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("创建时间")
    private LocalDateTime createTime;

}
